funnyTestable is package {

  contract Testable over %s is {
    toTest has type (%s,%t) => integer where sizeable over %t;
  };

  implementation Testable over string is {
      toTest = (function (a,b) is (size(a)+size(b)));    
  };

  main() do { 

    t1 is toTest("Hello",list{1;2;3});
    logMsg(info, "t1 is $t1"); 

    -- the next line got a type error saying 
    -- "hash literal not valid here 
    -- because list of integer not equal to hash of(%__47213, %__47214)" 

    t2 is toTest("Good Morning",hash{1->1;2->2}); -- now commented out to pass type checking
    logMsg(info, "t2 is $t2");
  }
}